9-4 x}ぇA

一般矩陣的內部資料型態都是預設成 double(雙精準浮點數),但在 MATLAB 5.3 版之後,也支援不同長度的整數與浮點數資料態,整理如下表:

指令說明
uint8 轉換成不帶正負號、 8 位元的整數,其值域為 $[0, 2^{8}-1]=[0,255]$
uint16 轉換成不帶正負號、16 位元的整數,其值域為 $[0, 2^{16}-1]=[0,65535]$
uint32 轉換成不帶正負號、32 位元的整數,其值域為 $[0, 2^{32}-1]$
int8 轉換成帶正負號、 8 位元的整數,其值域為 $[-2^{7}, 2^{7}-1]=[-128,127]$
int16 轉換成帶正負號 、 16 位元的整數,其值域為 $[-2^{15}, 2^{15}-1]=[-32768,32767]$
int32 轉換成帶正負號 、 32 位元的整數,其值域為 $[-2^{31}, 2^{31}-1]$
single 轉換成 single(單精準浮點數),佔用 32 位元(4 bytes)
double 轉換成double (雙精準浮點數),佔用 64 位元(8 bytes)
char 轉換成字元或字串,每個字元佔用(16 位元)(2 bytes)

因此,如果我們要節省記憶體空間,就可以依矩陣元素值的範圍,選用不同的資料來儲存,例如:

Example 1: 09-矩陣的處理與運算/dataType01.mclear all % 清除所有工作空間的變數 x_double = magic(10); x_single = single(x_double); x32 = uint32(x_double); x16 = uint16(x_double); x8 = uint8(x_double); whos Name Size Bytes Class Attributes x16 10x10 200 uint16 x32 10x10 400 uint32 x8 10x10 100 uint8 x_double 10x10 800 double x_single 10x10 400 single

由上可知,使用 uint8 來儲存變數所佔的空間只有 double 的八分之一。但是要注意的是:整數資料型態的範圍有限,若超過此範圍,則超出部分將會被「裁掉」,例如:

Example 2: 09-矩陣的處理與運算/dataTypeRange01.mfprintf('uint8(300) ='); disp(uint8(300)); % uint8 的最大值為 255 fprintf('int8(-500) ='); disp(int8(-500)); % int8 的最小值為 -128uint8(300) = 255 int8(-500) = -128


MATLAB程式設計:入門篇